package socket;

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * Client类用于建立与服务器的连接，并向服务器发送消息
 */
public class Client {
    private Socket socket;

    /**
     * 构造函数，用于初始化Socket连接
     */
    public Client(){
        System.out.println("正在链接服务器");
        try {
            // 尝试连接到指定IP和端口的服务器
            socket = new Socket("176.15.14.32",8088);
            System.out.println("与服务器成功连接");
        } catch (IOException e) {
            // 如果连接失败，打印异常信息
            e.printStackTrace();
        }
    }

    /**
     * 启动客户端，读取用户输入并发送到服务器
     */
    public void start(){
        try {
            // 获取Socket的输出流，用于向服务器发送消息
            OutputStream out = socket.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(out,StandardCharsets.UTF_8);
            PrintWriter pw = new PrintWriter(osw,true);
            Scanner scanner = new Scanner(System.in);
            while (true){
                // 持续读取用户输入并发送至服务器，直到用户输入"exit"
                String str = scanner.nextLine();
                if("exit".equals(str)){
                    pw.println("再见");
                    break;
                }
                pw.println(str);
            }
        } catch (Exception e) {
            // 如果发生异常，打印异常信息
            e.printStackTrace();
        }finally {
            try {
                // 关闭Socket连接
                socket.close();
            } catch (IOException e) {
                // 如果关闭Socket时发生异常，打印异常信息
                e.printStackTrace();
            }
        }
    }

    /**
     * 程序入口
     * @param args 命令行参数
     */
    public static void main(String[] args){
        Client client = new Client();
        client.start();
    }
}
